#include <iostream>
#include "string"
#include "singleton.h"

using namespace std;

// 定义用来测试的类
class Test  // 使用宏和模板结合的方式实现单例
{
SINGLETON(Test)
public:
    // SINGLETON里面已经声明了无参的构造函数，这个地方不用声明,但是必须实现无参的构造函数
    //Test();
    ~Test();
    std::string getData(){
        static uint32_t i = 0;
        i++;
        cout << i << endl;
        return  "just a test";
    }
};

// 无参数构造函数的实现
Test::Test() {cout << "build " << endl;}
// 析构函数
Test::~Test() {cout << "destory" << endl;}

int main()
{
    ///[1] 以模板和宏结合的方式使用单例模式
    for (int i = 0; i < 10; ++i)
    {
        cout << &Test::instance() << endl;// 打印地址
        std::string str(Test::instance().getData()); // 调用函数
        cout << str << endl;  // 打印输出
    }


    return 0;
}
